#include "resultado.h"

Resultado::Resultado() {
	this->setListaNodosResultado(0);
}

Resultado::~Resultado() {
	if(this->getListaNodosResultado() != 0) {
		IteradorLista<NodoResultado*> iteradorNodos = this->getListaNodosResultado()->iterador();
		while(iteradorNodos.tieneSiguiente()) {
			delete iteradorNodos.siguiente();
		}
		delete this->getListaNodosResultado();
	}
}

Resultado::Resultado(const Resultado& otroResultado) {
	if(otroResultado.listaNodosReultado == 0){
		this->setListaNodosResultado(0);
	}else{
		this->setListaNodosResultado(new Lista<NodoResultado*>);
		IteradorLista<NodoResultado*> iterador = otroResultado.listaNodosReultado->iterador();
		while (iterador.tieneSiguiente()){
			this->getListaNodosResultado()->agregar(iterador.siguiente());
		}
	}

}

Resultado& Resultado::operator=(const Resultado &otroResultado) {
	if(&otroResultado != this){
		if(otroResultado.listaNodosReultado == 0){
			if(this->getListaNodosResultado() != 0){
				IteradorLista<NodoResultado*> iterador = this->getListaNodosResultado()->iterador();
				while(iterador.tieneSiguiente()){
					delete iterador.get();
					iterador.remover();
				}
				delete this->getListaNodosResultado();
			}

			this->setListaNodosResultado(0);
		}else{
			if(this->getListaNodosResultado() == 0){
				this->setListaNodosResultado(new Lista<NodoResultado*>);
			}else{
				IteradorLista<NodoResultado*> iterador = this->getListaNodosResultado()->iterador();
				while(iterador.tieneSiguiente()){
					delete iterador.get();
					iterador.remover();
				}
			}
			IteradorLista<NodoResultado*> otroIterador = otroResultado.listaNodosReultado->iterador();
			while(otroIterador.tieneSiguiente()){
				this->getListaNodosResultado()->agregar(otroIterador.siguiente());
			}
		}

	}
	return *this;
}


void Resultado::setListaNodosResultado(Lista<NodoResultado*>* nuevaLista) {
	this->listaNodosReultado = nuevaLista;
}

Lista<NodoResultado*>* Resultado::getListaNodosResultado() {
	return this->listaNodosReultado;
}
